#基础数据类型有int,float,str,bool
#复合数据类型有list,tuple,dict,set
from audioop import avgpp

#1、列表list
#1.1、列表是用中括号定义的一组数据
# lst=[50,5.6,True,'Python']
# print(lst)
# print(type(lst))

#1.2、列表使用下标|索引|index来访问列表中的元素
    #下标从左往右数是0,1,2...n-1
    #下标从右往左数是-1,-2,-3...-n
# lst=[50,5.6, True,'Python']
# print(lst[0],lst[3])
# print(lst[-1],lst[-4])
# print(lst[4])

#1.3、列表切片
    #列表名[开始下标:结束下标:步长]
    #注意!!!结束下标是不包含的
    #注意!!!切片只是查询列表，不会改变列表
# lst=[10,20,30,40,50,60,70,80,90]
# print(lst[3:8:2])
# print(lst[-2:-7:-2])
    #开始下标默认从0开始
    #结束下标默认取完整个列表
    #步长默认是1
# lst=[10,20,30,40,50,60,70,80,90]
# print(lst[:4:1])
# print(lst[4::1])
# print(lst[1:4:])
# print(lst[::3])
# print(lst[::])
# print(lst)

# #1.4、列表查询函数
# lst=[98,88,66,55,43,71,25,99,101]
# print(len(lst))         #len()获取列表的长度，元素的个数
# print(max(lst))         #max()获取列表的最大值
# print(min(lst))         #min()获取列表的最小值
# print(sum(lst))         #sum()求和
# print(sorted(lst))      #sorted()排序
# print(lst)              #以上函数都只是查询列表，不改变列表

#1.5、列表新增元素的函数
    #append和insert会改变列表
# lst=[98,88,66,55,43,71,25,99,101]
# lst.append(360)             #append(n)在列表的尾部添加元素n
# print(lst)
# lst.insert(1,10)            #insert(m,n)在列表lst[m]的前面插入元素n
# print(lst)

#1.6、列表删除函数
# lst=[98,88,66,55,44,33,55,22,99,55]
# lst.remove(55)      #remove(n)删除元素n，只删除第一个，按值删除
# print(lst)
# lst.pop(-1)         #pop(n)删除元素lst(n)，按下标删除
# print(lst)
# lst.clear()         #清空列表里的元素
# print(lst)

#1.7、列表的修改
# lst=[98,88,66,55,44,33,55,22,99,55]
# lst[0]=11           #修改列表的元素，直接赋值替换
# print(lst)
#
# lst=[98,88,66,55,44,33,55,22,99,55]
# lst.reverse()       #reverse()翻转列表
# print(lst)

# lst=[98,88,66,55,43,71,25,99,101]
# lst.sort()                  #sort()把列表从小到大排列
# print(lst)
# lst.sort(reverse=True)      #sort(reverse=True)把列表从大到小排列
# print(lst)

#==========================分割线==============================

#2、元组tuple
#2.1、元组是用小括号定义的一组数据
# tup=(11, 22,33,44,55)
# print(tup,type(tup))
# #2.2、元组也用下标获取元素
# tup=(11,55,33,44,22)
# print(tup[0],tup[4])
# print(tup[-1],tup[-5])
# #2.3、元组也能切片
# tup=(11,55,33,44,22)
# print(tup[::2])
#2.4、元组也能用max,min,sum,len,sorted等查询函数
# tup=(11,55,33,44,22)
# print(sorted(tup))
# #2.5、元组不允许被修改!!!
# tup=(11,55,33,44,22)
# tup.remove(11)  #!!!报错 'tuple' object has no attribute 'remove'

#==========================分割线==============================
#3、字典dict
#3.1、字典是用大括号定义的一组键值对key-value
# dic={'empno':'7839','ename':'smith','job':'clerk'}
# print(dic,type(dic))
#3.2、字典的键是不允许重复的
# dic={"empno":"7839","empno":'9527',"ename":"smith","job":"clerk","job":"manager"}
# print(dic)
#3.3、字典是用键名取值，字典没有下标
# dic={"empno":"7839","ename":"smith", "job":"clerk"}
# print(dic['ename'])
# # print(dic[1])
# #3.4、字典的查看
# dic={"empno":"7839", "ename":"smith", "job":"clerk"}
# print(dic.keys())           #keys()取键
# print(dic.values())         #values()取值
# print(dic.items())          #items()取键值对
#3.5、字典添加键
# dic={"empno":"7839", "ename":"smith", "job":"clerk"}
# dic['deptno']=101           #直接赋值，就可以往字典中添加键值对
# print(dic)
#3.6 字典删除键
# dic={"empno":"7839","ename":"smith","job":"clerk"}
# del dic['job']          #删除job键
# print(dic)
# dic.clear()             #clear()清空字典
# print(dic)
#3.7 合并字典 |
dic1={"empno":"7839"}
dic2={"ename":"smith"}
dic1|dic2


#练习：输入年份、月份，输出year年month月有day天。
#用字典做
# day={1:31,2:28,3:31,4:30,5:31,6:30,7:31,8:31,9:30,10:31,11:30,12:31}
# year=int(input('输入年份:'))
# month=int(input('输入月份:'))
# if year%4==0 and year%100!=0 or year%400==0:
#     day[2]=29
# print(f'{year}年{month}月有{day[month]}天')
#用列表做
# day=[0,31,28,31,30,31,30,31,31,30,31,30,31]
# year=int(input('输入年份:'))
# month=int(input('输入月份:'))
# if year%4==0 and year%100!=0 or year%400==0:
#     day[2]=29
# print(f'{year}年{month}月有{day[month]}天')

#==========================分割线==============================

#4、集合set
#4.1、集合是用大括号定义的一组数据
#4.2、集合没有下标，不能定向取值
#4.3、集合内的元素不允许重复
# s ={1,3,5,2,4,1}
# print(s,type(s))
#print(s[0])    #报错 'set' object is not subscriptable

#练习。给定列表['a','b','
#要求给列表去重
# lst=['a','b','c','d','a','c','b','e','x','c']
# lst=list( set(lst) )      #先将列表转换为集合去重，再将集合转换为列表
# print(lst)